From c15d23ab5b138c7e9fca472e6329c9fe433b5c2f Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 6 Dec 2011 20:29:22 +0100 Subject: [PATCH] gdk: Ensure that GdkPointerWindowInfo is only generated for pointers --- gdk/gdkdisplay.c | 3 +++ gdk/gdkwindow.c | 26 +++++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c index 702f6b4891..b2d65d2a13 100644 --- a/gdk/gdkdisplay.c +++ b/gdk/gdkdisplay.c @@ -1120,6 +1120,9 @@ _gdk_display_get_pointer_info (GdkDisplay *display, { GdkPointerWindowInfo *info; + if (device && gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD) + device = gdk_device_get_associated_device (device); + if (G_UNLIKELY (!device)) return NULL; diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 1d1e6d05e7..d3d96bc18f 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -9571,10 +9571,10 @@ _gdk_windowing_got_event (GdkDisplay *display, { GdkInputMode mode; - pointer_info = _gdk_display_get_pointer_info (display, device); - - if (pointer_info) + if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD) { + pointer_info = _gdk_display_get_pointer_info (display, device); + if (source_device != pointer_info->last_slave && gdk_device_get_device_type (source_device) == GDK_DEVICE_TYPE_SLAVE) pointer_info->last_slave = source_device; @@ -9684,15 +9684,19 @@ _gdk_windowing_got_event (GdkDisplay *display, } } - /* Store last pointer window and position/state */ - old_state = pointer_info->state; - old_button = pointer_info->button; + if (pointer_info) + { + /* Store last pointer window and position/state */ + old_state = pointer_info->state; + old_button = pointer_info->button; + + gdk_event_get_coords (event, &x, &y); + convert_native_coords_to_toplevel (event_window, x, y, &x, &y); + pointer_info->toplevel_x = x; + pointer_info->toplevel_y = y; + gdk_event_get_state (event, &pointer_info->state); + } - gdk_event_get_coords (event, &x, &y); - convert_native_coords_to_toplevel (event_window, x, y, &x, &y); - pointer_info->toplevel_x = x; - pointer_info->toplevel_y = y; - gdk_event_get_state (event, &pointer_info->state); if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) pointer_info->button = event->button.button; -- 2.30.2